
        <html>
			<head>
			     <title>iOS客户端hack的两种姿势 - titan</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/mobile/12466">http://drops.wooyun.org/mobile/12466</a></h1>
				
      <p>
        <blockquote>
  <p>分析某商城漏洞，在漏洞验证时采用了两种iOS上的hack工具：cycript和reveal，各有风情，均能攻城拔寨，实乃我辈日常居家、杀人越货之利刃，现与诸君共享之。</p>
</blockquote>

<h1>0x00 漏洞缘起</h1>

<hr />

<p>该商城的iOS版app为用户提供了找回密码的功能，用户需通过三个步骤找回密码：</p>

<ol>
<li>输入一个本地的图形辨识验证码（多余？）</li>
<li>提供用户手机号，输入一个短信验证码</li>
<li>输入新的密码、确认密码，然后Bingo</li>
</ol>

<!--more-->

<p>要找漏洞，先抓包看看，先易后难，实在不行再做逆向分析。burp架起先，开代理、关闭intercept、ssl协议算法全勾上（免得碰上奇葩ssl协商参数，以前遭过冤枉）。iPhone上在wifi选项中配置代理，指向burp。然后开app，burp报错。</p>

<p><img src="http://static.wooyun.org//drops/20160126/2016012610354022621180.png" alt="enter description here" /></p>

<p>难道客户端对证书进行了pin？冷笑三声，开启我的ssl kill switch。再开程序，登录，进商城，一切顺利。ok，现在进入正题，找漏洞。进入找回密码功能，按步骤进行提交，重设了密码，然后到burp中查看抓到的数据包，下面是重置密码第三步发出的post数据包。</p>

<p><img src="http://static.wooyun.org//drops/20160126/2016012610354252940249.png" alt="enter description here" /></p>

<p>仔细分析这个数据包，发现除了一个签名，其它跟第二步获得的手机短信验证码没有一毛钱的关系，难道这个“你妈是你妈”问题的验证是在客户端做的？那我们是不是改改电话号码就能重置任意用户密码了？在burp中改包试了试，不行的，服务器返回错误。看来在Sign中有文章，看来需要从客户端想办法了。</p>

<p>丢到ida中跑，找到如下关键函数：</p>

<p><img src="http://static.wooyun.org//drops/20160126/2016012610354325593330.png" alt="enter description here" /></p>

<p>然后再初略的溜了一下该函数涉及到的各种参数。</p>

<p><img src="http://static.wooyun.org//drops/20160126/2016012610354517627434.png" alt="enter description here" /></p>

<p>好像没有涉及到第二步中的短信验证码，应该只是把电话号码、新口令作为签名的可变输入。不错，省得逆向签名算法了，人生苦短，可以节约一堆脑细胞了。基本思路出来了，就是正常执行前两步，然后在第三步中将界面电话号码（用户账号）改为其它被攻击的账号。</p>

<h1>0x01 cycript大法</h1>

<hr />

<p>先介绍一下cycript，官方解释：</p>

<blockquote>
  <p>Cycript allows developers to explore and modify running applications on either iOS or Mac OS X using a hybrid of Objective-C++ and JavaScript syntax through an interactive console that features syntax highlighting and tab completion.</p>
</blockquote>

<p>简而言之：插入进程，想改就改。不过这货是命令行模式，混合了ObjectC和JS，官方帮助写的精简了点，还是稍微有点烦。不过自带了tab键补全功能，略感欣慰。下面一步步来使用。</p>

<p>实现目标的先决条件是要找到找回密码过程第三步界面对应的对象，然后对该对象中与注册手机号码相关的属性进行操作。</p>

<p>先要将app运行到我们要攻击的第三步，也就是输入新口令和确认新口令的界面，我们的目标是使用hack方法修改不可编辑的注册手机号。</p>

<p><img src="http://static.wooyun.org//drops/20160126/2016012610354715520527.png" alt="enter description here" /></p>

<p>当然，我们也要先将app使用classdump将app的类信息获取，发现了其中与口令重置相关的信息如下，可以辅助下一步的攻击工作。</p>

<p><img src="http://static.wooyun.org//drops/20160126/2016012610354955225623.png" alt="enter description here" /></p>

<p>使用ps命令获得被注入的进程信息，然后使用如下命令启动cycript，涂红部分为进程名称，当然，使用pid也可以。</p>

<p><img src="http://static.wooyun.org//drops/20160126/2016012610355063279722.png" alt="enter description here" /></p>

<p>然后获得当前app的UI句柄。</p>

<p><img src="http://static.wooyun.org//drops/20160126/2016012610355216286820.png" alt="enter description here" /></p>

<p>获得app的keyWindow。</p>

<p><img src="http://static.wooyun.org//drops/20160126/2016012610355335470920.png" alt="enter description here" /></p>

<p>获得keyWindow的rootViewController。</p>

<p><img src="http://static.wooyun.org//drops/20160126/20160126103555374001022.png" alt="enter description here" /></p>

<p>获得当前可视的ViewController。做界面hack，前几步基本是一样的，目的就是找到当前显示界面对应的对象。</p>

<p><img src="http://static.wooyun.org//drops/20160126/20160126103556551861125.png" alt="enter description here" /></p>

<p>各位看官发现没的，这个FindPwdViewController正是我们使用classdump发现的密码重置类，看来接近问题答案了。</p>

<p><img src="http://static.wooyun.org//drops/20160126/20160126103558859771219.png" alt="enter description here" /></p>

<p>接下来可以直接根据classdump出的类信息敲入如下命令：</p>

<p><img src="http://static.wooyun.org//drops/20160126/20160126103559891851318.png" alt="enter description here" /></p>

<p>看到text没得，就是界面显示的注册手机号，改改改！</p>

<p>再看手机上，注册手机号已经修改成了目标手机号。点击完成，成功！</p>

<h1>0x02 reveal大法</h1>

<hr />

<p>reveal工具其实应该被奉为界面hack的第一利器，无它，太好用了。各位可能还在纠结上面敲入的各种烦人命令，如果对ObjectC和面向对象思想以及各类砸壳、dump工具不熟的化，要完成cycript大法，还真不是一件容易活。但reveal不同，在安装好后，就是轻轻的点点鼠标，敲个电话号码的事。</p>

<p>不过还是有石头要挡道，就是reveal在手机端的安装。下面是笔者的安装经验:</p>

<p>reveal原本是作为xcode的辅助工具，为app开发者使用的，本不具备插入任意程序的功能，但在越狱的iphone上借助cydia substrate可以插入任意app，包括springboard，安装方法参见<a href="http://42.96.192.22/?tag=%E8%B0%83%E8%AF%95%E5%88%A9%E5%99%A8reveal">参考1</a>。笔者是在iOS9上装的，一定要按这篇文章说得，把framework搞到手机端，另外，plist文件要用plisteditor等专用工具编写，还有就是Filter一定要写，要不然就是iPhone6S Plus也会慢的无法忍受！如果出现这种窘境，立即home+power硬关机，按音量+开机跳过substrate，重新进行Filter配置。最后提醒一句，reveal所在的主机和被调试手机要在同一局域网。</p>

<p>reveal安装好之后，需要找到被注入程序的bundle id，就在app的ipa包的info.plist文件中，使用plisteditor等工具打开，搜CFBundleIdentifier就能找到，下面涂红的部分即是。</p>

<p><img src="http://static.wooyun.org//drops/20160126/20160126103601583831416.png" alt="enter description here" /></p>

<p>找到bundle id后将其填到Filter中即可。启动程序，在reveal的connect目标中会发现目标app，直接connect，reveal中会出现手机端app的界面。借一张上面文章的图，各位感受一下，各种界面元素一览无余，而且可以3d显示层级关系，酷。</p>

<p><img src="http://static.wooyun.org//drops/20160126/20160126103602903151515.png" alt="enter description here" /></p>

<p>更酷的是，它可以直接修改界面元素的内容，不管在原手机端该元素是否可编辑，并且编辑后直接反应到手机端界面。</p>

<p>有了这种功能，要应付我们本漏洞验证的目标就太容易了，啪啪啪走到第三步，刷新reveal段界面，在如下图中直接编辑注册手机号内容，回车，再在手机端点击完成，ok。</p>

<p><img src="http://static.wooyun.org//drops/20160126/20160126103604527711613.png" alt="enter description here" /></p>

<h1>0x03 总结</h1>

<hr />

<p>cycript和reveal其实都根植于cydia substrate这棵大树，不过风格迥异罢了。一个是玲珑剑，需要舞者精心驾驭，一个是大砍刀，直接快意杀伐。不过爽的是我可以左手玲珑剑，右手大砍刀，仰天长啸，快意恩仇，不亦乐乎！</p>

<h1>0x04 参考</h1>

<hr />

<ul>
<li><p>调试利器Reveal</p>

<p><a href="http://42.96.192.22/?tag=%E8%B0%83%E8%AF%95%E5%88%A9%E5%99%A8reveal">http://42.96.192.22/?tag=%E8%B0%83%E8%AF%95%E5%88%A9%E5%99%A8reveal</a></p></li>
</ul>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          